package cn.edu.aust.myexpri5app.utils;

import com.apkfuns.logutils.LogUtils;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

import cn.edu.aust.myexpri5app.model.UserInfo;

public class JsonTools {

    private static UserInfo jsonToObj(JSONObject jsonObject){
        UserInfo user=new UserInfo();
        user.setId(jsonObject.optString("id","-1"));
        user.setUsername(jsonObject.optString("username","xxx"));
        user.setPhone(jsonObject.optString("phone","xxxxxx"));
        user.setSex(jsonObject.optString("sex","male"));
        user.setPassword(jsonObject.optString("password"));

        //获取兴趣串
        JSONArray hobJsonArr=jsonObject.optJSONArray("hobbys");
        ArrayList<String> hobList=null;
        if (hobJsonArr!=null && hobJsonArr.length()>0){
            hobList=new ArrayList<>();
            for (int j=0;j<hobJsonArr.length();j++){
                hobList.add(hobJsonArr.optString(j));
            }
        }
        user.setHobbys(hobList);

        return user;
    }

    public static UserInfo jsonToObj(String jsonStr){
        JSONObject jsonObject=null;
        if (jsonStr!=null && !jsonStr.equals("")){
            try {
                jsonObject=new JSONObject(jsonStr);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }else{
            return null;
        }

        UserInfo userInfo=null;
        if (jsonObject!=null&& jsonObject.length()>0){
            userInfo=jsonToObj(jsonObject);
        }

        return userInfo;
    }

    public static List<UserInfo> jsonToObjs(String jsonStr){
        ArrayList<UserInfo> userList=null;
        JSONArray jsonArr=null;

        if (jsonStr!=null &&!jsonStr.equals("")) {
            userList=new ArrayList<>();
            try {
                jsonArr=new JSONArray(jsonStr);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }else{
            LogUtils.d("json串为空！");
            return null;
        }

        int length=jsonArr.length();
        for (int i=0;i<length;i++){
            UserInfo user=null;
            //获取JSON数组中的每一个元素
            JSONObject jsonObject=jsonArr.optJSONObject(i);
            if (jsonObject!=null&& jsonObject.length()>0){
                user=jsonToObj(jsonObject);
            }
            userList.add(user);
        }

        return userList;
    }

    public static String objsToJson(List<UserInfo> userInfos){
        String jsonStr="";
        if(userInfos!=null && !userInfos.isEmpty()){
            JSONArray userJsonArr=new JSONArray();

            try {
                for (UserInfo user:userInfos){
                    JSONObject userJson=new JSONObject();
                    userJson.put("id",user.getId());
                    userJson.put("username",user.getUsername());
                    userJson.put("password",user.getPassword());
                    userJson.put("phone",user.getPhone());
                    userJson.put("sex",user.getSex());
                    JSONArray hobArr=null;
                    if (user.getHobbys()!=null && !user.getHobbys().isEmpty()){
                        hobArr=new JSONArray();
                        for (String hob:user.getHobbys()){
                            hobArr.put(hob);
                        }
                        userJson.put("hobbys",hobArr);
                    }
                    userJsonArr.put(userJson);
                }
                jsonStr=userJsonArr.toString();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        return jsonStr;
    }


    public static String objToJson(UserInfo user){
       String jsonStr="";
        try {
            JSONObject jsonObject=new JSONObject();
            jsonObject.put("id",user.getId());
            jsonObject.put("username",user.getUsername());
            jsonObject.put("password",user.getPassword());
            jsonObject.put("phone",user.getPhone());
            jsonObject.put("sex",user.getSex());
            JSONArray hobArr=null;
            if (user.getHobbys()!=null && !user.getHobbys().isEmpty()){
                hobArr=new JSONArray();
                for (String hob:user.getHobbys()){
                    hobArr.put(hob);
                }
                jsonObject.put("hobbys",hobArr);
            }
            jsonStr=jsonObject.toString();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return jsonStr;
    }
}
